// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init({
  env: 'cloud1-2ga6780q302b7f4a'
})
const db = cloud.database()

// 要创建的集合列表
const COLLECTIONS = [
  'equipment',
  'orders',
  'users',
  'admins'
]

// 云函数入口函数
exports.main = async (event, context) => {
  console.log('开始初始化数据库集合')
  const wxContext = cloud.getWXContext()
  const results = {}
  
  // 逐个检查并创建集合
  for (const collectionName of COLLECTIONS) {
    try {
      console.log(`正在创建集合: ${collectionName}`)
      await db.createCollection(collectionName)
      results[collectionName] = '成功创建'
      console.log(`成功创建集合: ${collectionName}`)
    } catch (error) {
      console.error(`创建集合 ${collectionName} 失败:`, error)
      
      // 如果错误是由于集合已存在，则视为成功
      if (error.errCode === -7004) {
        results[collectionName] = '已存在'
        console.log(`集合 ${collectionName} 已存在`)
      } else {
        results[collectionName] = `错误: ${error.errMsg || error.message || '未知错误'}`
      }
    }
  }
  
  // 检查是否有默认装备，如果没有则添加一个示例装备
  try {
    const { total } = await db.collection('equipment').count()
    
    if (total === 0) {
      console.log('没有装备数据，正在添加示例装备')
      const equipmentData = {
        name: '示例装备-登山杖',
        description: '这是一个示例装备，用于测试系统功能',
        category: '登山杖',
        imageUrl: 'cloud://cloud1-2ga6780q302b7f4a.636c-cloud1-2ga6780q302b7f4a-1309467885/default/equipment.png',
        creditRequired: 60,
        status: '可借用',
        borrowCount: 0,
        createTime: db.serverDate(),
        updateTime: db.serverDate()
      }
      
      const res = await db.collection('equipment').add({
        data: equipmentData
      })
      
      results.sampleEquipment = `添加成功，ID: ${res._id}`
      console.log('成功添加示例装备:', res._id)
    } else {
      results.sampleEquipment = '已有装备数据，跳过添加示例'
      console.log('已有装备数据，跳过添加示例')
    }
  } catch (error) {
    console.error('检查/添加示例装备失败:', error)
    results.sampleEquipment = `错误: ${error.errMsg || error.message || '未知错误'}`
  }
  
  return {
    event,
    openid: wxContext.OPENID,
    appid: wxContext.APPID,
    unionid: wxContext.UNIONID,
    results: results
  }
} 